centos systemTap安装教程和如何为其他机器生成测量工具

您所在的位置:网站首页 Systemtap 离线安装 centos systemTap安装教程和如何为其他机器生成测量工具

centos systemTap安装教程和如何为其他机器生成测量工具

2023-04-18 08:15| 来源: 网络整理| 查看: 265

大佬教程收集整理的这篇文章主要介绍了centos systemTap安装教程和如何为其他机器生成测量工具,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

在安装前,需要知道下自己的系统环境,我的环境如下:

uname -r 2.6.18-308.el5 Linux 308.el5 #1 SMP Tue Feb 21 20:06:06 EST 2012 x86_64 x86_64 x86_64 GNU/Linux 安装

为了部署 SystemTap,需要安装以下两个 RPM 包:

systemtap@H_403_30@ systemtap-runtime@H_403_30@

以 root 权限,运行以下命令安装:

@H_772_36@yum install systemtap systemtap-runtime

注:在使用 SystemTap 前,需要安装内核信息包,可以运行以下命令安装:

stap-prep

如果安装失败,请手动安装,手动安装步骤请见手动安装内核信息包。

注:我在我的主机上运行stap-prep的报错信息如下

@H_772_36@[root@test ~]# stap-prep Need to install the following packages: kernel-devel-2.6.18-308.el5.x86_64 kernel-debuginfo-308.el5.x86_64 TraceBACk (most recent call last): File "/usr/bin/yumdownloader",line 19,in import yum ImportError: No @H_602_38@module named yum problem downloading rpm(s) kernel-devel-308.el5.x86_64 手动安装必需的内核信息包

需要的内核信息包包含你内核中匹配以下字段 -devel, -debuginfo, 和 -debuginfo-common 的包。如下:

kernel-debuginfo@H_403_30@ kernel-debuginfo-common@H_403_30@ kernel-devel@H_403_30@

需要安装和你内核对应版本的包,运行命令

308.el5

可以指定你的内核是2.6.18-308.el5,因此你需要的包如下:

kernel-debuginfo-2.6.18-308.el5.x86_64.rpm@H_403_30@ kernel-devel-2.6.18-308.el5.x86_64.rpm@H_403_30@ kernel-debuginfo-common-2.6.18-308.el5.x86_64.rpm@H_403_30@

重要!!!!注意:这三个包必须与你的内核版本匹配。

下载这三个 rpm 包,到http://rpm.pbone.net这个网站去下载。或者最简单的在 google 搜索包名。

下载 kernel-debuginfo-2.6.18-308.el5.x86_64.rpm:

wget ftp://ftp.pbone.net/mirror/ftp.redhat.com/pub/redhat/linux/enterprise/5Client/en/os/x86_64/Debuginfo/kernel-debuginfo-2.6.308.el5.x86_64.rpm

下载 kernel-devel-2.6.18-308.el5.x86_64.rpm:

Debuginfo/kernel-devel- 下载 kernel-debuginfo-common-2.6.18-308.el5.x86_64.rpm:

Debuginfo/kernel-debuginfo-common- 分别安装这三个包:

rpm -ivh kernel-debuginfo-common-308.el5.x86_64.rpm rpm -ivh kernel-debuginfo-308.el5.x86_64.rpm rmp -ivh kernel-devel-308.el5.x86_64.rpm 初始化测试

为了测试 stap 是否安装正确,需要运行以下命令测试:

stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}'

注:上面这条测试语句会失败,所以更换一个测试文件吧,从http://blog.yufeng.info/archives/747拿了一个示例

Linux下谁在切换我们的进程的 stap 脚本

cswmon.stp

#! /usr/bin/env stap # # global csw_count global idle_count probe scheduler.cpu_off { csw_count[task_prev,task_next]++ idle_count+=idle } function fmt_task(task_prev,task_next) { return sprintf("%s(%d)->%d)",task_execname(task_prev),task_pid(task_prev),task_execname(task_next),task_pid(task_next)) } function print_cswtop () { printf (%45s %10s\n","Context switch",68)">"COUNT") foreach ([task_prev,task_next] in csw_count- limit 20) { printf(%10d\n",fmt_task(task_prev,task_next),csw_count[task_prev,task_next]) } printf("idle",idle_count) delete csw_count delete idle_count } probe timer.s($1) { print_cswtop () printf("--------------------------------------------------------------\n") }

这个脚本会每隔设定的时间打印出TOP 20切换最多的进程和他的pid,我们来看下结果:@H_650_262@

执行脚本:

[root@gd2ywdnscsvm56 ~]# stap test.stp 5 Context switch COUNT swapper(0)->vmtoolsd(2698) 54 vmtoolsd(2698)->swapper(0) 54 stapio(27632)->swapper(25 swapper(0)->python(3799) 25 python(3799)->swapper(25 swapper(0)->stapio(27632) 24 swapper(0)->iscsid(2955) 20 iscsid(2955)->swapper(20 swapper(0)->hald-addon-stor(3551) 20 hald-addon-stor(3551)->swapper(20 swapper(0)->mpt_poll_0(694) 5 mpt_poll_0(694)->swapper(0) 5 swapper(0)->automount(3631) 5 automount(3631)->swapper(5 swapper(0)->vmmemctl(2543) 5 vmmemctl(2543)->swapper(5 swapper(2954) 5 iscsid(2954)->swapper(5 swapper(0)->pcscd(3500) 5 pcscd(3500)->swapper(5 idle 194 -------------------------------------------------------------- Context switch COUNT swapper(51 vmtoolsd(51 swapper(30 hald-addon-stor(30 swapper(25 stapio(20 swapper(0)->hald(3527) 6 hald(3527)->swapper(6 swapper(198

我们可以看到进程从哪里切换到哪里,并且发生了多少次, 最后一行,我打印出来idle的次数,也就是说这时候系统没啥事情做,就切换到idle(0)这个进程去休息去了。

通过上面的调查,我们会很清楚的了解到我们系统的开销发生在那里,方便我们定位问题。

@H_650_262@ 为其他机器生成测量工具

当运行一个 SystemTap 脚本的时候,SystemTap 会在脚本外构建一个内核模块,SystemTap 然后把这个内核模块加载进内核,允许它直接从内核提取指定的数据。

正常情况下,SystemTap 仅仅会运行在部署了 SystemTap 的系统上。这意味着,如果你想在 10 个系统上运行 SystemTap,你必须把 SystemTap 部署到所有的系统上。有时候,这可能既不可行也不理想。比如,公司政策禁止管理员在指定的机器上安装 RPM 包来提供编译和 debug 信息,从而防止 SystemTap 的部署。为了解决这一问题,SystemTap 允许你使用 Cross-instrumentation。

Cross-instrumentation 是一个从一台计算机上的 SystemTap 脚本生成 SystemTap 测量模块并在另一台计算机上使用的过程。这个过程提供了以下好处:

各种主机的内核信息包可以被安装在单台主机上@H_403_30@ 每台目标机器仅仅需要被安装一个 RPM 包,为了使用生成的 SystemTap 测量模块:systemtap-runtime 包@H_403_30@

为了简单起见,在这一节中使用以下术语:

测量模块 - 从 SystemTap 脚本构建的内核模块。SystemTap 模块在主机系统上被构建,将在目标系统的内核上被加载。@H_403_30@ 主机系统 - SystemTap 脚本编译测量模块的系统,为了在目标系统上加载它们。@H_403_30@ 目标系统 - SystemTap 脚本构建测量模块系统@H_403_30@ 目标内核 - 目标系统的内核,这个内核用于你加载或运行测量模块@H_403_30@

为了配置一个主机系统和一个目标系统,需要完成以下步骤:

在每台目标系统安装 systemtap-runtime 包@H_403_30@ 通过在每台主机上运行uname -r命令来决定运行在每台目标系统上的内核@H_403_30@ 在主机系统上安装 SystemTap。在主机系统上,你将可以为目标系统构建测量指令。关于怎样安装 SystemTap 的指令,可以参考“SystemTap 学习笔记 - 安装篇”。@H_403_30@ 前期确定目标系统的内核版本,安装目标内核和在主机系统上的相关的 RPM 包,如 “SystemTap 学习笔记 - 安装篇” 中的 “手动安装必需的内核信息包” 所述。如果多个目标系统使用不同的目标内核,为在目标系统上使用的每个不同的内核重复这一步骤。@H_403_30@

完成这些步骤后,你现在可以在主机系统上构建测量模块。为了构建测量模块,在主机系统上运行以下命令(一定要指定适当的值):

stap -r kernel_version script -m @H_605_46@module_name

这里,kernel_version涉及到目标内核的版本(在目标系统上通过uname -r命令输出),script涉及到转换成测量模块的脚本,@H_369_123@module_name涉及测量模块要求的名称。

注:为了确定运行的内核的架构,你可以使用以下命令:uname -m

一旦测量模块被编译完成,拷贝它到目标系统,然后用下面的命令加载它:

staprun module_name.ko

例如,为 2.6.18-92.1.10.el5 (x86_64 架构) 的目标内核从一个名称为 simple.stp 的 SystemTap 脚本创建一个测量模块 simple.ko,使用以下命令:

stap -r 92.1.10.el5 -e 'probe vfs.read {exit()}' -m simple

这将创建一个名为 simple.ko 的模块,为了使用这个测量模块,拷贝它到目标系统,然后在目标系统运行以下命令:

staprun simple.ko

注:重要!!!! 主机系统必须与目标系统是相同的架构以及相同的 Linux 发行版,为了使构建的测量模块能正常工作。

参考资料

http://sourceware.org/systemtap/SystemTap_Beginners_Guide/using-systemtap.html@H_403_30@ 大佬总结

以上是大佬教程为你收集整理的centos systemTap安装教程和如何为其他机器生成测量工具全部内容,希望文章能够帮你解决centos systemTap安装教程和如何为其他机器生成测量工具所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3